package com.itheima.homework.bh2004;
/*
【编号2004】有一个抽奖池，里面存放了一些固定金额的奖金
int[] prizePool = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
此时，有两个人A和B轮流在奖箱中随机抽奖（即A抽一次-->B抽一次-->A抽一次-->B抽一次...），直到所有的奖金都被抽出，
每次抽奖耗时1秒。请编写程序，使用两个线程模拟两人的抽奖过程，输出结果如下（金额的顺序随机）：
A抽出奖金600
B抽出奖金1000
A抽出奖金900
B抽出奖金300
A抽出奖金500
B抽出奖金200
A抽出奖金700
B抽出奖金100
A抽出奖金800
B抽出奖金400
 */

import java.util.ArrayList;
import java.util.Random;


public class Test4 {
    //把int数组拿过来
    static int[] prizePool = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
    //创建集合
    static ArrayList<Integer> list = new ArrayList<>();
    public static void main(String[] args) {
        //创建随机数
        Random r = new Random();
        //把int数组prizePool进行遍历，将数组每个元素添加到集合list
        for (int i : prizePool) {
            list.add(i);
        }
        //A轮抽奖
        new Thread(() -> {
            while (true) {
                //锁住当前线程，其他线程进不来
                synchronized ("j") {
                    //集合没有元素，奖池内没有奖金，就结束了
                    if (list.size() == 0) {
                        break;
                        //相反奖池内有奖金就可以就行抽奖
                    } else {
                        if (div.flag) {
                            try {
                                //本次抽奖耗时一秒钟
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //用随机数获取索引值，随机数个数为奖池内的奖金个数
                            int index = r.nextInt(list.size());
                            System.out.println(Thread.currentThread().getName() + " 抽出奖金 " + list.get(index));
                            //从奖池内抽了一次奖金出来，奖池内就少了一个奖金
                            list.remove(index);
                            //直到把奖池内的奖金都抽完
                            div.flag = false;
                            //唤醒所有的线程
                            "j".notifyAll();
                        } else {
                            try {
                                //当前线程进行等待
                                "j".wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }, "A").start();

        //B轮抽奖
        new Thread(() -> {
            while (true) {
                //锁住当前线程，其他线程进不来
                synchronized ("j") {
                    //集合没有元素，奖池内没有奖金，就结束了
                    if (list.size() == 0) {
                        break;
                        //相反奖池内有奖金就可以就行抽奖
                    } else {
                        if (div.flag) {
                            try {
                                //当前线程进行等待
                                "j".wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                //本次抽奖耗时一秒钟
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //用随机数获取索引值，随机数个数根据奖池内的奖金个数
                            int index = r.nextInt(list.size());
                            System.out.println(Thread.currentThread().getName() + " 抽出奖金 " + list.get(index));
                            //抽一次奖池内的奖金个数就减少
                            list.remove(index);
                            //奖池内还有奖金
                            div.flag = true;
                            //唤醒所有线程
                            "j".notifyAll();
                        }
                    }
                }
            }
        }, "B").start();
    }
}
class div {
    //定义奖池div内是没有奖金的
    public static boolean flag = false;
}